package com.loan.mappers;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.loan.entity.Perm;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.jdbc.SQL;

import java.util.List;

/**
 * YJS
 */
public interface PermMapper extends BaseMapper<Perm> {

    /**
     * 创建权限视图表，格局员工的id拆线呢权限信息
     * @param empid
     * @return
     */
    @Select("select * from v_perm where emp_id=#{empid}")
    List<Perm> getByEmpId(int empid);

    /**
     * 根据员工的id查询权限视图的信息表
     * @param empid
     * @return 返回权限集合
     */
    @Select("select * from m_perm where emp_id=#{empid}")
    List<Perm> getmenuByEmpId(int empid);

    /**
     * 根据角色的id查询权限信息
     * @param roleid
     * @return 返回权限集合
     */
    @Select("SELECT p.* FROM perm p ,role_perm rp WHERE p.id=rp.perm_id AND rp.role_id =#{roleid}")
    List<Perm> getByRoleId(int roleid);

    /**
     * 查询所有可用的权限信息
      * @return 返回权限集合
     */
    @Select("select * from perm where status='y'")
    List<Perm> getallmenu();


    /**
     * 根据权限id修改权限
     * @param permid
     * @return
     */
    @Update("update perm set status='n' where id=#{permid}")
    Void deletePerm(int permid);

    /**
     * 根据权限id获取权限
     * @param permid
     * @return
     */
    @Select("SELECT * FROM perm where id=#{permid}")
    Perm getPerm(int permid);

    /**
     * 模糊查询
     * @param perm
     * @return
     */
    @SelectProvider(type = SqlProvuder.class, method = "selectByPerm")
    List<Perm> selectPerm(Perm perm);


    public static class SqlProvuder{
        public static String selectByPerm(Perm perm){
            SQL sql = new SQL();
            sql.SELECT("*").FROM("perm");
            if(perm.getId() != null){
                sql.WHERE("id=#{id}");
            }
            if(perm.getName() != null){
                sql.WHERE("name like concat('%',#{name},'%')");
            }
          return sql.toString();
        }
    }
}
